热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

通用性|定数_分布式数据存储与管理[HDFS+HBase]

篇首语:本文由编程笔记#小编为大家整理,主要介绍了分布式数据存储与管理[HDFS+HBase]相关的知识,希望对你有一定的参考价值。一、系

篇首语:本文由编程笔记#小编为大家整理,主要介绍了分布式数据存储与管理[HDFS+HBase]相关的知识,希望对你有一定的参考价值。



一、系统架构

在分布式存储领域,相信大多数人对HDFS(Hadoop Distributed File System)并不陌生,它是GFS(Google File System)的开源实现版本,解决大规模非结构化数据存储的问题。然而,HBase则是基于HDFS之上的一个分布式的、面向列存的开源NoSQL数据库,解决大规模结构化和半结构化数据存储的问题。


a) HDFS架构

HDFS[1][2]采用Master/Slave架构。一个HDFS集群是由一个Namenode和一定数目的Datanodes组成,如图1所示。Namenode是一个中心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。集群中的Datanode一般是一个节点一个,负责管理它所在节点上的存储。HDFS暴露了文件系统的名字空间,用户能够以文件的形式在上面存储数据。从内部看,一个文件其实被分成一个或多个数据块,这些块存储在一组Datanode上。Namenode执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录。它也负责确定数据块到具体Datanode节点的映射。Datanode负责处理文件系统客户端的读写请求。在Namenode的统一调度下进行数据块的创建、删除和复制。


图1 HDFS系统架构


b) HBase架构

HBase[3][4][5]也同样采用Master/Slave架构。一个HBase集群是由一个HMaster和一定数目的RegionServer组成,如图2所示。HBase的一张表会被切分成若干块,每块叫做一个Region。每个Region中存储着从startKey到endKey中间的记录。这些Region会被分到集群的各个节点上去存储,每个节点叫做一个RegionServer,这些节点负责数据的读写,一个RegionServer可以处理大约1000个Regions。HMaster的功能是处理Region的协调工作,具体包括:管理RegionServer,实现其负载均衡;管理和分配Region,比如在Region Split时分配新的Region;在RegionServer退出时迁移其内的Region到其他RegionServer上;监控集群中所有RegionServer的状态(通过Heartbeat和监听ZooKeeper中的状态);处理Schema更新请求(创建、删除、修改Table的定义)。


图2 HBase系统架构

有一个的特殊的HBase目录表,.META表,保存了集群中Regions的位置。HBase读写流程,如图3所示。


图3 HBase读写流程

当客户端第一次读取(写入)HBase请求到达时:


  • 第一步:客户端从HMaster中获取.META表; 第二步:客户端将查询.META表来获取要访问的row
  • key对应的RegionServer,并将这些信息与.META表格一起缓存起来。
  • 第三步:将从相应的RegionServer获取该行(写入该行到相应的RegionServer。

二、分析与对比

HDFS+HBase与单机中的数据库+文件系统类似,但又不完全一样。首先,HBase不实现复制机制,而是交给底下的HDFS系统,HDFS则会把一个块写入到多个数据节点中。因此,HBase更像维护表格与文件之间映射关系的一个计算引擎。如果用Aurora或PolarDB中的描述方式,HBase是控制面(控制引擎),HDFS则是数据面(存储引擎),只不过这两种层级分布在不同的系统之中而已。其次,HBase与传统的关系型数据库对外接口不同,仅支持API接口,不支持SQL语言,也不支持Join等操作,也放松了ACID属性,所以,它是一个NoSQL型数据库。

像HDFS+HBase这样分布式数据存储与管理系统,它们将控制和存储两大模块进行分层,分别在两个相对独立的分布式系统中实现。不难发现,这种实现方式既存在优点,也存在弊端。因为层次化的设计可以使整个系统的耦合度和复杂度降低,也可以使整个系统的每一个部分相对独立,也更具有通用性和一般性。然而,这样相对独立的设计也给整个系统带来许多不必要的开销,降低了系统的整体性能。在每一个独立的系统中,都有一整套Master/Slave架构,上一层系统充当下一层系统的Client端,这就使整个数据存储的路径变长了,例如,一次简单写操作要既经过HBase的Master也要经过HDFS的Master。随着越来越多的应用对低时延、高吞吐量特性的需求,这样的设计也就很难满足了。所以,整个系统就必须高度融合,尽可能减少不必要的网络和存储开销,使整个读/写路径变的更短,才使整系统的性能得以提升。换句话说,当前的HDFS+HBase软件栈太重了,我们必须将其减负才能实现低时延、高吞吐量的特性。

如果我们换个角度看问题,HDFS+HBase其本质也是一种shared disk的架构,整个HBase集群共享下层HDFS存储池。相信大多数人已经对shared disk VS shared nothing问题[7][8]不言而喻了,就不再赘述了。除了上述问题以外,HBase采用列存储的方式,很难应对OLTP型的负载,并且它的数据恢复也采用WAL的方式,导致其恢复时间较长,也存在不可靠的分裂问题[6]。


三、小结

像HDFS+HBase这样,由多个独立的分布式系统组成的数据存储与管理解决方案,各个系统更具一般性和通用性,但是很难满足用户对更低时延、更高吞吐量的追求。为实现更高性能,整个系统之间必须高度融合,更具定制化,尽可能缩短数据处理的路径,从而减少不必要的开销。


参考文献:

[1] http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_design.html.
[2] https://www.cnblogs.com/laov/p/3434917.html.
[3] https://mapr.com/blog/in-depth-look-hbase-architecture.
[4] https://www.ibm.com/developerworks/cn/analytics/library/ba-cn-bigdata-hbase/index.html.
[5] https://www.edureka.co/blog/overview-of-hbase-storage-architecture.
[6] https://www.toadworld.com/platforms/nosql/b/weblog/archive/2013/10/14/avoiding-hbase-reliability-problems.
[7] http://www.benstopford.com/2009/11/24/understanding-the-shared-nothing-architecture.
[8] Lee S. Shared-nothing vs. shared-disk cloud database architecture[J]. International Journal of Energy, Information and Communications, 2011, 2(4).


推荐阅读
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • Netflix利用Druid实现高效实时数据分析
    本文探讨了全球领先的在线娱乐公司Netflix如何通过采用Apache Druid,实现了高效的数据采集、处理和实时分析,从而显著提升了用户体验和业务决策的准确性。文章详细介绍了Netflix在系统架构、数据摄取、管理和查询方面的实践,并展示了Druid在大规模数据处理中的卓越性能。 ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • Java项目分层架构设计与实践
    本文探讨了Java项目中应用分层的最佳实践,不仅介绍了常见的三层架构(Controller、Service、DAO),还深入分析了各层的职责划分及优化建议。通过合理的分层设计,可以提高代码的可维护性、扩展性和团队协作效率。 ... [详细]
  • 深入解析Hadoop的核心组件与工作原理
    本文详细介绍了Hadoop的三大核心组件:分布式文件系统HDFS、资源管理器YARN和分布式计算框架MapReduce。通过分析这些组件的工作机制,帮助读者更好地理解Hadoop的架构及其在大数据处理中的应用。 ... [详细]
  • 深入解析Spring Cloud微服务架构与分布式系统实战
    本文详细介绍了Spring Cloud在微服务架构和分布式系统中的应用,结合实际案例和最新技术,帮助读者全面掌握微服务的实现与优化。 ... [详细]
  • Spring Cloud学习指南:深入理解微服务架构
    本文介绍了微服务架构的基本概念及其在Spring Cloud中的实现。讨论了微服务架构的主要优势,如简化开发和维护、快速启动、灵活的技术栈选择以及按需扩展的能力。同时,也探讨了微服务架构面临的挑战,包括较高的运维要求、分布式系统的复杂性、接口调整的成本等问题。最后,文章提出了实施微服务时应遵循的设计原则。 ... [详细]
  • 2018年3月31日,CSDN、火星财经联合中关村区块链产业联盟等机构举办的2018区块链技术及应用峰会(BTA)核心分会场圆满举行。多位业内顶尖专家深入探讨了区块链的核心技术原理及其在实际业务中的应用。 ... [详细]
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • 本文探讨了Java编程的核心要素,特别是其面向对象的特性,并详细介绍了Java虚拟机、类装载器体系结构、Java类文件和Java API等关键技术。这些技术使得Java成为一种功能强大且易于使用的编程语言。 ... [详细]
  • 从码农到创业者:我的职业转型之路
    在观察了众多同行的职业发展后,我决定分享自己的故事。本文探讨了为什么大多数程序员难以成为架构师,并阐述了我从一家外企离职后投身创业的心路历程。 ... [详细]
author-avatar
虎仔球妈_459
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有